---
id: any
title: any类型 和 unknown类型
---

### any 类型（任意类型）

躲避检查，所有语法不再进行类型检查。尽量少用。

```ts
let str: any = "abc";

// any类型，以下代码不会报错
str = 123;
str = [];
str();
str.a = 1;
```

### unknown 类型（不确定的类型）

3.0 出的 unknown 类型。
类型检查依然存在，只是变得宽松了。

```ts
let str: unknown = "abc";

str = 123; // 正确
str = [];  // 正确
str(); // 报错：对象的类型为 "unknown"。
str.a = 1; // 报错：对象的类型为 "unknown"。
```

### any 和 unknown 的区别？
any 不会进行任何检查。  
unknown 进行类型检查或使用类型断言才能对变量进行操作。

```ts
// any 类型不会检查cb是否是函数，直接略过。不会报错
function getUser(cb: any) {
  cb();
}

// unknown 类型会检查cb是否是函数，会报错：对象的类型为 "unknown"
function getUser(cb: unknown) {
  cb();
}

// 可以进行类型缩小
function getUser(cb: unknown) {
  if (typeof cb === "function") {
    cb();
  }
}
```

:::tip
在不知道类型时，优先使用 unknown 代替。
:::
